import {
    reqCart,
    reqBuyNowGoodsInfo,
    reqAdress,
    reqSubmit,
    reqPayInfo,
    reqPayStatus
} from "../../api/index"
import moment from "moment"
Page({
    data: {
        // 立即购买的商品id
        goodsId: 0,
        // 立即购买的祝福语
        remarks: "",
        // 购物车商品数据
        cartArr: [],
        // 总价
        total: 0,
        // 收获地址
        address: [],
        // 收集订购人的名字
        buyName: "",
        // 收集订购人的手机号
        buyPhone: "",
        // 收集订购人期望送达的日期
        deliveryDate: "",
        // 控制pop弹窗的显示与影藏
        isShowPop: false,
        // 选择日期框的最小时间
        minData: new Date().getTime(),

    },
    onLoad(query) {
        // 获取收获地址
        this.getAddress()
        // 区分页面来路
        if (query.remarks) {
            // 从立即购买来
            // 存储祝福语与商品id
            this.setData({
                remarks: query.remarks,
                goodsId: query.goodsId,
            })
            // 获取立即购买商品的信息
            this.getBuyGoodsInfo()
        } else {
            // 从购物车来
            this.getCartList();
        }

    },
    onShow(){
        this.getAddress();
    },
    // 结算按钮的提交订单方法
    async submitOrder() {
        // 整理参数
        const data = {
            userAddressId: this.data.address.id,
            buyName: this.data.buyName,
            buyPhone: this.data.buyPhone,
            deliveryDate: this.data.deliveryDate,
            remarks: this.data.remarks,
            cartList: this.data.cartArr
        }
        // 发送数据 -- 得到订单号
        const result = await reqSubmit(data)
        // 向微信官方发送请求 -- 获取支付信息
        if (result.code == 200) {
            // 获取支付的参数信息
            this.getPayParams(result.data)
        } else {}

    },
    // 获取支付的参数信息
    async getPayParams(orderNo) {
        // 获取支付参数
        const result = await reqPayInfo(orderNo)
        if (result.code == 200) {
            //   发起微信支付
            wx.requestPayment({
                nonceStr: result.data.nonceStr,
                package: result.data.package,
                paySign: result.data.paySign,
                timeStamp: result.data.timeStamp,
                signType: result.data.signType,
                async  success() {
                    // 询问服务器支付结果,进行下一步处理
                   const result= await reqPayStatus(orderNo)
                   if(result.code==200){
                       wx.navigateTo({
                         url: '/pages/paySuccess/paySuccess',
                       })
                   }
                },
                fail() {},
            })
        }
    },
    // 收集确定的时间
    confirmDate(value) {
        // 收集数据
        this.setData({
            deliveryDate: moment(value.detail).format("YYYY-MM-DD")
        })
        // 关闭选择日期窗口窗口
        this.hidePop()
    },
    // 显示选择日期界面
    showPop() {
        this.setData({
            isShowPop: true
        })
    },
    // 关闭先择日期界面
    hidePop() {
        this.setData({
            isShowPop: false
        })
    },
    // 获取收获地址
    async getAddress() {
        const result = await reqAdress()
        if (result.code == 200) {
            this.setData({
                address: result.data
            })
        }
    },
    // 获取立即购买商品的信息
    async getBuyGoodsInfo() {
        const {
            goodsId,
            remarks
        } = this.data
        const result = await reqBuyNowGoodsInfo(goodsId, remarks)
        console.log(result);
        if (result.code == 200) {
            // 将数据存储
            this.setData({
                // 商品信息
                cartArr: result.data.cartVoList,
                // 商品总价 
                total: result.data.totalAmount
            })
        }

    },
    // 获取购物车列表数据
    async getCartList() {
        const result = await reqCart();
        if (result.code == 200) {
            // 对result.data数据进行过滤
            result.data = result.data.filter((item) => (item.isChecked))
            // 将数据进行赋值
            this.setData({
                cartArr: result.data
            })
            // 计算总价
            this.computedTotal()
        }
    },
    // 计算总价
    computedTotal() {
        const total = this.data.cartArr.reduce((pre, next) => {
            return pre + next.count * next.price
        }, 0)
        this.setData({
            total: total
        })
    },
})